<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
	<meta name="keywords" content="Seata" />
	<meta name="description" content="如果您有兴趣攻克Seata，欢迎您。首先，我们非常鼓励这种意愿。这是为您提供帮助的列表。" />
	<!-- 网页标签标题 -->
	<title>为Seata贡献</title>
  <link rel="shortcut icon" href="/img/seata_logo_small.jpeg"/>
	<link rel="stylesheet" href="/build/documentation.css" />
</head>
<body>
	<div id="root"><div class="documentation-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="//img.alicdn.com/tfs/TB1gqL1w4D1gK0jSZFyXXciOVXa-1497-401.png"/></a><div class="search search-normal"><span class="icon-search"></span></div><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="https://img.alicdn.com/tfs/TB14eEmw7P2gK0jSZPxXXacQpXa-38-32.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html" target="_self">首页</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/docs/overview/what-is-seata.html" target="_self">文档</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/developers/developers_dev.html" target="_self">开发者</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/index.html" target="_self">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html" target="_self">社区</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/blog/download.html" target="_self">下载</a></li></ul></div></div></header><div class="bar"><div class="bar-body"><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="front-img"/><span>文档</span><img src="https://img.alicdn.com/tfs/TB1cm8nJwDqK1RjSZSyXXaxEVXa-160-160.png" class="back-img"/></div></div><section class="content-section"><div class="sidemenu"><div class="sidemenu-toggle"><img src="https://img.alicdn.com/tfs/TB1E6apXHGYBuNjy0FoXXciBFXa-200-200.png"/></div><ul><li class="menu-item menu-item-level-1"><span>概述</span><ul><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/overview/what-is-seata.html" target="_self">Seata 是什么？</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/overview/terminology.html" target="_self">术语表</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/overview/faq.html" target="_self">FAQ</a></li></ul></li><li class="menu-item menu-item-level-1"><span>用户文档</span><ul><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/quickstart.html" target="_self">快速启动</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/configurations.html" target="_self">参数配置</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><span>事务分组<img style="transform:rotate(-90deg)" class="menu-toggle" src="https://img.alicdn.com/tfs/TB15.Ilw2b2gK0jSZK9XXaEgFXa-26-16.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/txgroup/transaction-group.html" target="_self">事务分组介绍</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/txgroup/transaction-group-and-ha.html" target="_self">事务分组与高可用</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><span>配置中心<img style="transform:rotate(-90deg)" class="menu-toggle" src="https://img.alicdn.com/tfs/TB15.Ilw2b2gK0jSZK9XXaEgFXa-26-16.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/configuration/index.html" target="_self">简介</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/configuration/nacos.html" target="_self">Nacos 配置中心</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/configuration/apollo.html" target="_self">Apollo 配置中心</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/configuration/etcd3.html" target="_self">Etcd3 配置中心</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/configuration/consul.html" target="_self">Consul 配置中心</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/configuration/zookeeper.html" target="_self">Zookeeper 配置中心</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><span>注册中心<img style="transform:rotate(-90deg)" class="menu-toggle" src="https://img.alicdn.com/tfs/TB15.Ilw2b2gK0jSZK9XXaEgFXa-26-16.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/registry/index.html" target="_self">简介</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/registry/nacos.html" target="_self">Nacos 注册中心</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/registry/eureka.html" target="_self">Eureka 注册中心</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/registry/etcd3.html" target="_self">Etcd3 注册中心</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/registry/consul.html" target="_self">Consul 注册中心</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/registry/zookeeper.html" target="_self">Zookeeper 注册中心</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/api.html" target="_self">API 支持</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/microservice.html" target="_self">微服务框架支持</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/ormframework.html" target="_self">ORM 框架支持</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/user/datasource.html" target="_self">数据库类型支持</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><span>测试报告<img style="transform:rotate(-90deg)" class="menu-toggle" src="https://img.alicdn.com/tfs/TB15.Ilw2b2gK0jSZK9XXaEgFXa-26-16.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/performance.html" target="_self">性能测试报告</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><span>附录<img style="transform:rotate(-90deg)" class="menu-toggle" src="https://img.alicdn.com/tfs/TB15.Ilw2b2gK0jSZK9XXaEgFXa-26-16.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/appendix/global-transaction-status.html" target="_self">事务状态</a></li></ul></li></ul></li><li class="menu-item menu-item-level-1"><span>开发者指南</span><ul><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><span>各事务模式<img style="transform:rotate(-90deg)" class="menu-toggle" src="https://img.alicdn.com/tfs/TB15.Ilw2b2gK0jSZK9XXaEgFXa-26-16.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/dev/mode/at-mode.html" target="_self">Seata AT 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/dev/mode/tcc-mode.html" target="_self">Seata TCC 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/user/saga.html" target="_self">Seata Saga 模式</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/dev/mode/xa-mode.html" target="_self">Seata XA 模式</a></li></ul></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/dev/seata-mertics.html" target="_self">Metrics设计</a></li></ul></li><li class="menu-item menu-item-level-1"><span>运维指南</span><ul><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/upgrade.html" target="_self">版本升级指南</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><a href="/zh-cn/docs/ops/operation.html" target="_self">Metrics配置</a></li><li style="height:36px;overflow:hidden" class="menu-item menu-item-level-2"><span>部署<img style="transform:rotate(-90deg)" class="menu-toggle" src="https://img.alicdn.com/tfs/TB15.Ilw2b2gK0jSZK9XXaEgFXa-26-16.png"/></span><ul><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-guide-beginner.html" target="_self">新人文档</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-server.html" target="_self">直接部署</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-by-docker.html" target="_self">Docker部署</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-by-kubernetes.html" target="_self">Kubernetes部署</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-by-helm.html" target="_self">Helm 部署</a></li><li class="menu-item menu-item-level-3"><a href="/zh-cn/docs/ops/deploy-ha.html" target="_self">高可用部署</a></li></ul></li></ul></li></ul></div><div class="doc-content markdown-body"><h1>为Seata贡献</h1>
<p>如果您有兴趣攻克Seata，欢迎您。首先，我们非常鼓励这种意愿。这是为您提供帮助的列表。</p>
<h2>话题</h2>
<ul>
<li><a href="#%E6%8A%A5%E5%91%8A%E5%AE%89%E5%85%A8%E9%97%AE%E9%A2%98">报告安全问题</a></li>
<li><a href="#%E6%8A%A5%E5%91%8A%E4%B8%80%E8%88%AC%E9%97%AE%E9%A2%98">报告一般问题</a></li>
<li><a href="#%E4%BB%A3%E7%A0%81%E5%92%8C%E6%96%87%E6%A1%A3%E8%B4%A1%E7%8C%AE">代码和文档贡献</a></li>
<li><a href="#%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%B4%A1%E7%8C%AE">测试用例贡献</a></li>
<li><a href="#%E8%87%B4%E5%8A%9B%E4%BA%8E%E5%B8%AE%E5%8A%A9%E4%BB%BB%E4%BD%95%E4%BA%8B%E6%83%85">致力于帮助任何事情</a></li>
<li><a href="#%E4%BB%A3%E7%A0%81%E9%A3%8E%E6%A0%BC">代码风格</a></li>
</ul>
<h2>报告安全问题</h2>
<p>安全问题应该始终得到认真对待。按照我们通常的原则，我们不鼓励任何人散布安全问题。如果您发现Seata的安全问题，请不要公开讨论，甚至不要公开问题。相反，我们建议您向我们发送一封私人电子邮件至 <a href="mailto:dev-seata@googlegroups.com">dev-seata@googlegroups.com</a>进行举报。</p>
<h2>报告一般问题</h2>
<p>坦白地说，我们认为Seata的每位用户都是非常友好的贡献者。体验Seata之后，您可能会对项目有一些反馈。然后随时通过<a href="https://github.com/seata/seata/issues/new/choose">NEW ISSUE</a>打开<a href="https://github.com/seata/seata/issues/new/choose">问题</a>。</p>
<p>因为我们在一个分布式的方式合作项目Seata，我们对此表示赞赏<strong>编写良好</strong>，<strong>详细</strong>，<strong>明确</strong>的问题报告。为了提高沟通效率，我们希望每个人都可以搜索您的问题是否在搜索列表中。如果发现它存在，请在现有问题下的评论中添加您的详细信息，而不要打开一个全新的issue。</p>
<p>为了使问题详细信息尽可能地标准，我们为问题报告者设置了“ <a href="https://github.com/seata/seata/blob/develop/.github/ISSUE_TEMPLATE">问题模板</a> ”。请<strong>务必</strong>按照说明填写模板中的字段。</p>
<p>在很多情况下，您可以打开一个问题：</p>
<ul>
<li>错误报告</li>
<li>功能要求</li>
<li>性能问题</li>
<li>功能提案</li>
<li>功能设计</li>
<li>需要帮助</li>
<li>doc不完整</li>
<li>测试改进</li>
<li>有关项目的任何问题</li>
<li>等等</li>
</ul>
<p>另外，我们必须提醒您，在填写新issue时，请记住从您的帖子中删除敏感数据。敏感数据可以是密码，密钥，网络位置，私人业务数据等。</p>
<h2>代码和文档贡献</h2>
<p>鼓励采取一切措施使Seata项目变得更好。在GitHub上，Seata的每个改进都可以通过PR（拉取请求的缩写）来实现。</p>
<ul>
<li>如果发现错字，请尝试解决！</li>
<li>如果发现错误，请尝试修复它！</li>
<li>如果发现一些冗余代码，请尝试将其删除！</li>
<li>如果发现缺少一些测试用例，请尝试添加它们！</li>
<li>如果您可以增强功能，请<strong>不要</strong>犹豫！</li>
<li>如果发现隐式代码，请尝试添加注释以使其清晰！</li>
<li>如果您发现代码丑陋，请尝试重构它！</li>
<li>如果可以帮助改善文档，那就再好不过了！</li>
<li>如果发现文档不正确，请直接解决该问题！</li>
<li>...</li>
</ul>
<p>实际上，不可能完全列出它们。只要记住一个原则：</p>
<blockquote>
<p>我们期待您的任何回复。</p>
</blockquote>
<p>由于您已准备好通过PR改善Seata，因此建议您在此处查看PR规则。</p>
<ul>
<li><a href="https://github.com/seata/seata/blob/develop/CONTRIBUTING.md#workspace-preparation">工作准备</a></li>
<li><a href="https://github.com/seata/seata/blob/develop/CONTRIBUTING.md#branch-definition">分支定义</a></li>
<li><a href="https://github.com/seata/seata/blob/develop/CONTRIBUTING.md#commit-rules">提交规则</a></li>
<li><a href="https://github.com/seata/seata/blob/develop/CONTRIBUTING.md#pr-description">PR说明</a></li>
</ul>
<h3>工作准备</h3>
<p>要提出PR，我们假设您已经注册了GitHub ID。然后，您可以按照以下步骤完成准备工作：</p>
<ol>
<li>
<p><strong>FORK</strong> Seata分支到您的存储库。要使此工作有效，您只需要单击<a href="https://github.com/seata/seata">seata / seata</a>主页右边的按钮Fork 。然后，您将在<code>https://github.com/&lt;your-username&gt;/seata</code>中<code>your-username</code>找到您的存储库，这是您的GitHub用户名。</p>
</li>
<li>
<p><strong>CLONE</strong>您自己的存储库以在本地进行开发。用于<code>git clone git@github.com:&lt;your-username&gt;/seata.git</code>将存储库克隆到本地计算机。然后，您可以创建新分支来完成您希望进行的更改。</p>
</li>
<li>
<p><strong>Set Remote</strong>上游设置为<code>git@github.com:seata/seata.git</code>使用以下两个命令：</p>
</li>
</ol>
<pre><code>git remote add upstream git@github.com:seata/seata.git
git remote set-url --push upstream no-pushing

</code></pre>
<p>使用此远程设置，您可以像这样检查git远程配置：</p>
<pre><code>$ git remote -v
origin     git@github.com:&lt;your-username&gt;/seata.git (fetch)
origin     git@github.com:&lt;your-username&gt;/seata.git (push)
upstream   git@github.com:seata/seata.git (fetch)
upstream   no-pushing (push)

</code></pre>
<p>加上这一点，我们可以很容易地将本地分支与上游分支同步。</p>
<h3>分支定义</h3>
<p>现在，我们假设通过拉取请求所做的所有贡献都是针对Seata中的<a href="https://github.com/seata/seata/tree/develop">分支发展</a>。在做出贡献之前，了解分支定义会有所帮助。</p>
<p>作为贡献者，请再次记住，通过拉取请求进行的每个贡献都是为了分支发展。在Seata项目中，还有其他几个分支，我们通常称它们为发布分支（例如0.6.0、0.6.1），功能分支，修补程序分支和主分支。</p>
<p>正式发布版本时，将有一个发布分支，并以版本号命名。</p>
<p>发布之后，我们将发布分支的提交合并到master分支中。</p>
<p>当发现某个版本中存在错误时，我们将决定在更高版本中进行修复或在特定修补程序版本中进行修复。当我们决定修复此修补程序版本时，我们将根据相应的发行分支检出该修补程序分支，执行代码修复和验证，然后将其合并到开发分支和master分支中。</p>
<p>对于更大的功能，我们将拉出功能分支以进行开发和验证。</p>
<h3>提交规则</h3>
<p>实际上，在Seata中，我们在提交时要认真对待两个规则：</p>
<ul>
<li><a href="https://github.com/seata/seata/blob/develop/CONTRIBUTING.md#commit-message">提交讯息</a></li>
<li><a href="https://github.com/seata/seata/blob/develop/CONTRIBUTING.md#commit-content">提交内容</a></li>
</ul>
<h4>提交讯息</h4>
<p>提交消息可以帮助审稿人更好地了解提交的PR的目的。它也可以帮助加快代码审查过程。我们鼓励贡献者<strong>清楚明白</strong>提交消息而不是模棱两可的消息。通常，我们提倡以下提交消息类型：</p>
<ul>
<li>docs：xxxx。例如，“ docs：添加有关Seata群集安装的文档”。</li>
<li>feature：xxxx。例如，“新功能：在AT模式下支持oracle”。</li>
<li>bugfix：xxxx。例如，“错误修正：修正了输入nil参数时的错误”。</li>
<li>refactor：xxxx。例如，“重构：简化以使代码更具可读性”。</li>
<li>test：xxx。例如，“测试：为func InsertIntoArray添加单元测试用例”。</li>
<li>其他可读和显式的表达方式。</li>
</ul>
<p>另一方面，我们不鼓励捐助者像以下方式提交消息：</p>
<ul>
<li><s>修正错误</s></li>
<li><s>更新</s></li>
<li><s>添加文档</s></li>
</ul>
<p>如果您迷路了，请参阅《<a href="http://chris.beams.io/posts/git-commit/">如何编写Git提交消息</a>》作为开始。</p>
<h4>提交内容</h4>
<p>提交内容表示一次提交中包含的所有内容更改。我们最好将内容包含在一个提交中，这样可以在没有任何其他提交帮助的情况下支持审阅者的完整审阅。换句话说，一次提交中的内容可以传递CI以避免代码混乱。简而言之，我们要记住三个小规则：</p>
<ul>
<li>避免在提交中进行很大的更改；</li>
<li>每次提交均完整且可审查。</li>
<li>提交时检查git config（<code>user.name</code>，<code>user.email</code>）以确保它与您的github ID相关联。</li>
</ul>
<p>另外，在代码更改部分，我们建议所有贡献者都应阅读<a href="https://github.com/seata/seata/blob/develop/CONTRIBUTING.md#code-style">Seata</a>的<a href="https://github.com/seata/seata/blob/develop/CONTRIBUTING.md#code-style">代码样式</a>。</p>
<p>无论提交消息还是提交内容，我们都更加注重代码审查。</p>
<h3>PR 说明</h3>
<p>PR是更改Seata项目文件的唯一方法。为了帮助审稿人更好地实现目标，PR 说明不能太详细。我们鼓励贡献者遵循<a href="https://github.com/seata/seata/blob/develop/.github/PULL_REQUEST_TEMPLATE.md">PR模板</a>完成请求请求。</p>
<h2>测试用例贡献</h2>
<p>任何测试用例都将受到欢迎。当前，Seata功能测试用例是高度优先的。</p>
<ul>
<li>
<p>对于单元测试，您需要创建一个<code>xxxTest.java</code>在同一模块的测试目录中命名的测试文件。推荐您使用junit5 UT框架</p>
</li>
<li>
<p>对于集成测试，您可以将集成测试放在测试目录或seata-test模块中。建议使用 mockito 测试框架。</p>
</li>
</ul>
<h2>致力于帮助任何事情</h2>
<p>我们选择GitHub作为Seata合作的主要场所。因此，Seata的最新更新始终在这里。尽管通过PR捐款是一种明确的帮助方式，但我们仍然呼吁其他方式。</p>
<ul>
<li>如果可以的话，回复他人的问题；</li>
<li>帮助解决其他用户的问题；</li>
<li>帮助审查他人的PR设计；</li>
<li>帮助审查PR中其他人的代码；</li>
<li>讨论有关Seata的问题，以使事情更加清晰；</li>
<li>在GitHub之外倡导Seata技术;</li>
<li>在Seata上写博客，等等。</li>
</ul>
<h2>代码风格</h2>
<p>Seata代码样式符合阿里巴巴Java编码准则。</p>
<h3>指导方针</h3>
<p><a href="https://alibaba.github.io/Alibaba-Java-Coding-Guidelines/">阿里巴巴Java编码指南</a></p>
<h3>IDE插件安装（不必要）</h3>
<p><em>如果要在编码时发现问题，则无需安装。</em></p>
<h4>idea IDE</h4>
<p><a href="https://github.com/alibaba/p3c/blob/master/idea-plugin/README.md">p3c-idea-plugin-install</a></p>
<h4>eclipse IDE</h4>
<p><a href="https://github.com/alibaba/p3c/blob/master/eclipse-plugin/README.md">p3c-eclipse-plugin-install</a>
总之，<strong>任何帮助都是贡献。</strong></p>
</div></section><footer class="footer-container"><div class="footer-body"><img src="//img.alicdn.com/tfs/TB1dGrSwVT7gK0jSZFpXXaTkpXa-4802-1285.png"/><p class="docsite-power">website powered by docsite</p><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Seata 是一款阿里巴巴开源的分布式事务解决方案，致力于在微服务架构下提供高性能和简单易用的分布式事务服务。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/overview/what-is-seata.html" target="_self">Seata 是什么？</a></dd><dd><a href="/zh-cn/docs/user/quickstart.html" target="_self">快速开始</a></dd><dd><a href="https://github.com/seata/seata.github.io/issues/new" target="_self">报告文档问题</a></dd><dd><a href="https://github.com/seata/seata.github.io" target="_self">在Github上编辑此文档</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/blog/index.html" target="_self">博客</a></dd><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd></dl></div></div><div class="copyright"><span>Copyright © 2019 Seata</span></div></div></footer></div></div>
	<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
	<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
	<script>
		window.rootPath = '';
  </script>
	<script src="/build/documentation.js"></script>
	<script>
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?104e73ef0c18b416b27abb23757ed8ee";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
    </script>
</body>
</html>
